工具总结Gitgit命令总结
xiuqhouGit命令整理(持续更新)
本文记录常用的git命令,涵盖绝大部分日常开发场景,持续更新中…
设置用户名和邮箱
1 2 3 4 5 6
| # 设置用户名和邮箱 git config --global user.name "用户名" git config --global user.email "hello@itcast.cn" # 查看配置信息 git config --global user.name git config --global user.email
|
git提交日志
1 2 3 4 5
| git log [option] # 查看提交到哪个地方 --all # 显示所有分支 --pretty=oneline #将提交信息显示为一行 --abbrev-commit # 让输出的commit更简短 --graph # 以图的形式显示
|
解决git乱码问题
1
| git config --global core.quotepath false
|
/etc/bash.bashrc文件中加入下面代码
1 2
| export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8"
|
仓库操作
初始化仓库
1
| git init # 在需要创建仓库的文件夹下执行,初始化仓库
|
工作区、暂存区、仓库
1 2 3 4 5 6 7 8 9
| git status # 显示文件状态,untracked git add <文件名> # 暂存文件,文件名.表示所有文件
# git restore --staged <文件名> # 将暂存区文件从暂存区撤出,但不会更改文件 git restore <文件> # 将在工作空间但不在暂存区的文件撤销更改 git reset <文件名> # 将暂存的文件从暂存区撤出,同时恢复至上一次提交的状态
git rm --cached <文件名> # 将文件恢复至未跟踪的状态,"-r"参数表示递归
|
提交
1 2
| git commit -m "提交信息" # 文件提交到仓库 git commit --amend -m "提交信息" # 修改上一次的提交信息,注意不要对远程仓库使用
|
版本管理
1 2 3 4
| git checkout "commitID" # 签出指定的提交,不改变已有的提交树。 git revert "commitID" # 撤销已有提交,会创建一个完全相反的提交 git reset --hard <commitID> # 回退版本,该版本往后的所有提交都会被标记为删除,可以使用reflog命令在找回来。 git reflog # 前面所有的操作记录下来,可以看到已经删除的提交记录
|
暂存文件stash
1 2
| git stash save "暂存信息" # 将未提交的文件暂存起来,以便切换分支和之后恢复 git stash pop # 将上一次暂存修改恢复出来
|
决定哪些文件不需要git管理
1 2 3 4
| touch .gitignore # 创建忽略文件,里面写上不需要管理的文件,可使用文件通配符 *.a # 忽略.a文件 !lib.a # 但是保留lib.a文件 build/ # 忽略build目录下的所有文件
|
分支
1 2 3 4 5 6 7 8 9
| git branch -a # 查看分支,-a表示查看远程所有分支,其中红色表示当前所在分支 git branch -m "旧名字" "新名字" # 重命名分支 git branch "分支名" # 创建分支 git checkout "分支名" # 切换分支 git checkout -b "分支名" # 创建并直接切换到分支,等价于上面两个命令 git merge "分支名" # 将分支合并到当前所在的分支 git branch [option] "分支名" # 删除分支 -d # 把分支删除,会做各种检查 -D # 强制删除
|
开发中,一般有如下分支使用原则和流程:
-
master(生产)分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支,master才能上线。
-
develop(开发)分支
从master创建的分支,作为开发部门的主要分支,开发完成后合并到master分支准备上线,develop一般不删除。
-
feature(新功能)分支
从develop创建出来,feature功能完成后合并到develop上面去,然后把feature分支删除掉。要新建多个feature分支。
-
hotfix分支
从master创建出来,修改正常后合并到master,并合并到develop上面去。
-
test分支用于代码测试,pre分支用于预上线分支。
合并分支
1 2 3 4 5 6
| git checkout "分支名" # 首先切换到待合并的分支分支 # 1. 以变基的方式将当前分支合并到master分支上 git rebase master # 2. 以merge的方式将分支合并到master分支上 git merge --ff-only master git merge --abort # 终止合并操作
|
公私密钥对
1 2
| ssh-keygen -t rsa # 生成公私钥对 ssh -T git@github.com # 测试连接gitee或github
|
远程仓库
添加远程仓库
1 2 3
| git remote add origin <远程仓库地址> # 添加远程仓库 git remote set-url origin <远程仓库地址> # 修改远程仓库地址 git remote -v # 查看远程仓库,-v表示显示地址
|
推送远程仓库
1 2 3 4 5
| git push origin master # 把当前的master分支推送到origin仓库 git push [-f] [--set-upstream] [远端名 [本地分支名]:[远端分支名]] # --set-upstream推送到远程仓库,名字一样可以省略,up-stream表示本地和远端关联,-f表示强制覆盖 git push # 如果本地和远端已经关联,则直接可以推送
git branch -vv # 查看本地分支和远端分支的关联关系
|
克隆、抓取和拉取
1 2 3
| git clone <远程仓库地址> <本地文件夹名字> # 如果不设置文件夹,默认使用仓库中的文件夹 git fetch <远程仓库名> <远程仓库分支名> # 把远程更新抓取下来,但不会合并 git pull <远程仓库> <远程分支> # 远程更新拉去并合并,相当于git fetch 和git merge
|
git子模块
如果git仓库下有别的git仓库,就可以添加到子模块,子模块的改变需要在其仓库中提交后才会在主存储库中显示。
1 2 3
| # 删除子模块的.gitmodules文件 # 删除主存储库的.git/config对应的子模块项目 git rm --cached <子模块路径> # 取消管理子模块
|
对比文件差异
1 2 3
| git diff <分支1> <分支2> -- <文件名字> # 对比两个分支的文件差异 git diff -cached # 对比工作区和暂存区的文件差异 git diff commitID # 对比工作区与对应提交的文件差异
|
git代理
1 2
| git config --global http.proxy # 设置代理 git config --global --unset http.proxy # 取消代理
|
删除大文件
有时候仓库对大文件有存储容量限制,直接删除文件后还需要从历史记录中将其剔除,使用以下命令:
1 2 3 4
| # 不推荐该命令,似乎会污染历史记录 git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch <文件名或文件夹名>' --prune-empty --tag-name-filter cat -- --all # 使用下面命令 git filter-repo --path <文件名或文件夹名> --invert-paths
|